package com.shardingsphere.example.sharding;

/**
 * 分表策略接口
 */
public interface ShardingStrategy {

    /**
     * 根据分片键值计算表名后缀
     * @param shardingValue 分片键值
     * @param tableCount 表数量
     * @return 表名后缀
     */
    String getTableSuffix(Object shardingValue, int tableCount);

    /**
     * 获取实际表名
     * @param logicTableName 逻辑表名
     * @param shardingValue 分片键值
     * @param tableCount 表数量
     * @return 实际表名
     */
    default String getActualTableName(String logicTableName, Object shardingValue, int tableCount) {
        return logicTableName + "_" + getTableSuffix(shardingValue, tableCount);
    }
}

